Smartphones and other networked computing devices can run a wide variety of software programs. Failures in these software programs often lead to user dissatisfaction or failure to meet required performance criteria. For example, users often provide negative reviews of smartphone apps that fail during use. Failures during use can include failure to perform as expected, or unexpected termination of the app (e.g., triggering a “crash report” message on IOS devices or a “stopped” message on ANDROID devices). Within a software program, failures can, e.g., cause an exception to be thrown or cause a function to return a value indicative of an error (e.g., −1 for many POSIX system calls).
Many computing devices, such as smartphones, are subject to operational variations beyond the control of software programs. For example, network connectivity, accelerometer readings, and central processing unit (CPU) clock speed can change at any time because of battery life or the device's position or orientation in the real world.